package com.ceolt.dao.impl;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.List;

import com.ceolt.dao.ITestRecordDao;
import com.ceolt.entity.TestRecord;

/**
 * @author 天智教育
 *
 */
public class TestRecordDaoImpl implements ITestRecordDao {

	/*
	 * 持久化测试记录，每次都要先读取已经存在的历史记录，并把此 record 追加到那个集合中，再持久化那个集合
	 * 
	 * @see com.tz.cels.dao.ITestRecordDao#write(com.tz.cels.entity.TestRecord)
	 */
	@Override
	public void write(List<TestRecord> records, String file) {
		// 真正把这个集合写入到 文件中
		ObjectOutputStream oos = null;
		try {
			oos = new ObjectOutputStream(new FileOutputStream(file));
			// 调用持久化的方法
			oos.writeObject(records);
			// 输出一句日志
			System.out.println(">>>持久化测试数据成功...");
		} catch (IOException e) {
			e.printStackTrace();
			// 向业务层抛出一个运行时异常，以便让业务层知道持久化的失败
			throw new RuntimeException("持久化失败", e);
		} finally {
			try {
				if (oos != null)
					oos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/*
	 * 加载所有的已保存的测试记录，并返回整个 List
	 * 
	 * @see com.tz.cels.dao.ITestRecordDao#read()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public List<TestRecord> read(String file) {
		List<TestRecord> datas = null;
		// 真正把这个集合写入到 文件中
		ObjectInputStream ois = null;
		try {
			ois = new ObjectInputStream(new FileInputStream(file));
			// 调用持久化的方法
			datas = (List<TestRecord>) ois.readObject();
			// 输出一句日志
			System.out.println(">>>读取测试数据成功...");
		} catch (Exception e) {
			e.printStackTrace();
			// 向业务层抛出一个运行时异常，以便让业务层知道持久化的失败
			throw new RuntimeException("读取测试数据失败", e);
		} finally {
			try {
				if (ois != null)
					ois.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return datas;
	}
	
}
